LINQ (Language Integrated Query) এর বিভিন্ন প্রকারভেদ রয়েছে, যা বিভিন্ন ধরনের ডেটা সোর্সের সাথে কাজ করার জন্য ব্যবহৃত হয়। এই প্রকারভেদগুলি ডেটার ধরন এবং কাঠামোর ওপর ভিত্তি করে বিভিন্ন ফাংশনালিটি এবং কুয়েরি অপশন সরবরাহ করে। নিচে LINQ এর মূল প্রকারভেদগুলোর আলোচনা করা হলো:
LINQ to Objects হল LINQ এর একটি প্রকার যা ইন-মেমোরি অবজেক্ট, যেমন Array, List, Dictionary, Queue, এবং Stack এর মধ্যে ডেটা কুয়েরি করার জন্য ব্যবহৃত হয়। এটি সাধারণত মেমোরি-ভিত্তিক ডেটা সোর্সে কাজ করে এবং .NET Collection Types এর উপর কার্যকর হয়।
বিশেষত্ব:
উদাহরণ:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
foreach (var num in evenNumbers)
{
Console.WriteLine(num); // Output: 2, 4
}
LINQ to SQL হল LINQ এর একটি প্রকার যা SQL Server ডেটাবেসে ডেটা কুয়েরি করার জন্য ব্যবহৃত হয়। এটি Entity Framework এর পূর্ববর্তী সংস্করণে ডেটাবেস অ্যাক্সেসের জন্য ব্যবহৃত হত। LINQ to SQL ডেভেলপারদের SQL ডেটাবেসে অবজেক্টের মাধ্যমে ডেটা কুয়েরি করতে সহায়ক।
বিশেষত্ব:
DbContext
বা DataContext
ব্যবহার করে।উদাহরণ:
DataContext db = new DataContext();
var query = from customer in db.Customers
where customer.City == "London"
select customer;
foreach (var customer in query)
{
Console.WriteLine(customer.Name);
}
LINQ to Entities হল LINQ এর একটি প্রকার যা Entity Framework এর সাথে কাজ করে। এটি ডেটাবেস অ্যাক্সেসের জন্য আধুনিক পদ্ধতি হিসেবে ব্যবহৃত হয় এবং SQL Server, MySQL, PostgreSQL বা অন্য কোনো রিলেশনাল ডেটাবেসের সাথে কাজ করতে পারে।
বিশেষত্ব:
DbContext
এবং DbSet
ব্যবহার করে ডেটাবেস অ্যাক্সেস করা হয়।উদাহরণ:
using (var context = new MyDbContext())
{
var query = from customer in context.Customers
where customer.Country == "USA"
select customer;
foreach (var customer in query)
{
Console.WriteLine(customer.Name);
}
}
LINQ to XML হল LINQ এর একটি প্রকার যা XML ডেটা কুয়েরি এবং ম্যানিপুলেশন করতে ব্যবহৃত হয়। এটি XML ডকুমেন্ট থেকে ডেটা বের করা, আপডেট করা, এবং XML ডকুমেন্ট তৈরি করার জন্য খুবই কার্যকরী।
বিশেষত্ব:
উদাহরণ:
XDocument xdoc = XDocument.Load("books.xml");
var books = from b in xdoc.Descendants("book")
where (int)b.Element("price") > 20
select b;
foreach (var book in books)
{
Console.WriteLine(book.Element("title").Value);
}
LINQ to DataSets হল LINQ এর একটি প্রকার যা ADO.NET DataSet এর সাথে কাজ করে। এটি ডেটাবেস থেকে DataSet বা DataTable এর মাধ্যমে ডেটা কুয়েরি করার জন্য ব্যবহৃত হয়।
বিশেষত্ব:
উদাহরণ:
DataSet ds = new DataSet();
ds.ReadXml("products.xml");
var query = from product in ds.Tables["Product"].AsEnumerable()
where product.Field<decimal>("Price") > 100
select product;
foreach (var product in query)
{
Console.WriteLine(product.Field<string>("ProductName"));
}
Parallel LINQ (PLINQ) হল LINQ এর একটি প্রকার যা মাল্টি-থ্রেডেড কুয়েরি এক্সিকিউশন সমর্থন করে। এটি অত্যাধিক প্রক্রিয়াকরণের (multi-core processing) জন্য ডিজাইন করা হয়েছে, যা কুয়েরি এক্সিকিউশনের সময় পারফরম্যান্স উন্নত করে।
বিশেষত্ব:
উদাহরণ:
var numbers = Enumerable.Range(1, 1000);
var parallelQuery = from num in numbers.AsParallel()
where num % 2 == 0
select num;
foreach (var num in parallelQuery)
{
Console.WriteLine(num);
}
LINQ এর বিভিন্ন প্রকারভেদগুলি বিভিন্ন ডেটা সোর্সের জন্য উপযুক্ত। LINQ to Objects ইন-মেমোরি ডেটা সোর্সের জন্য, LINQ to SQL এবং LINQ to Entities ডেটাবেসের জন্য, LINQ to XML XML ডেটা কুয়েরি করার জন্য এবং PLINQ প্যারালাল কুয়েরি প্রসেসিংয়ের জন্য ব্যবহৃত হয়। প্রতিটি LINQ প্রকারের নিজস্ব সুবিধা এবং নির্দিষ্ট পরিস্থিতিতে ব্যবহারের উপযোগিতা রয়েছে, যা ডেভেলপারদের ডেটা ম্যানিপুলেশনকে আরও সহজ ও কার্যকর করে তোলে।
LINQ to Objects হল LINQ (Language Integrated Query)-এর একটি প্রকার, যা ইন-মেমোরি অবজেক্ট কালেকশন (যেমন Array, List, Dictionary, Queue, Stack) এর মধ্যে ডেটা কুয়েরি এবং ম্যানিপুলেশন করার জন্য ব্যবহৃত হয়। এটি .NET Collections এর সাথে কাজ করে এবং ইন-মেমোরি ডেটা সোর্সের উপর কার্যকরী।
LINQ to Objects ব্যবহার করার সময়, আপনি C# বা VB.NET এর মতো প্রোগ্রামিং ভাষার মধ্যে সরাসরি SQL-এর মতো কুয়েরি লেখার সুবিধা পান, যা কোড লেখাকে সহজ, পরিষ্কার এবং রিডেবল করে তোলে। এটি Deferred Execution সমর্থন করে, যার মানে কুয়েরি তখনই কার্যকর হয় যখন এর ফলাফল প্রয়োজন হয়।
List
, Array
, Dictionary
ইত্যাদি।List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// Query Syntax ব্যবহার করে even numbers বের করা
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
foreach (var num in evenNumbers)
{
Console.WriteLine(num); // Output: 2, 4, 6, 8, 10
}
এখানে numbers
লিস্টের মধ্যে থেকে যেসব সংখ্যা even (জোড়) তাদের বের করা হয়েছে।
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// Method Syntax ব্যবহার করে even numbers বের করা
var evenNumbers = numbers.Where(num => num % 2 == 0);
foreach (var num in evenNumbers)
{
Console.WriteLine(num); // Output: 2, 4, 6, 8, 10
}
এখানে Where
মেথড ব্যবহার করে even numbers বের করা হয়েছে। Method Syntax
ব্যবহার করা খুবই জনপ্রিয় এবং কমপ্লেক্স কুয়েরি করার জন্য বেশ উপকারী।
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// 5 এর বেশি এবং even সংখ্যাগুলো বের করা
var result = numbers.Where(num => num > 5 && num % 2 == 0);
foreach (var num in result)
{
Console.WriteLine(num); // Output: 6, 8, 10
}
এখানে দুটি শর্ত একসাথে ব্যবহার করা হয়েছে: একটি হলো সংখ্যা ৫ এর বেশি হতে হবে এবং দ্বিতীয় শর্ত হলো সংখ্যাটি even হতে হবে।
List<string> names = new List<string> { "Alice", "Bob", "Charlie", "David", "Eve" };
// নামের প্রথম অক্ষর বের করা
var initials = from name in names
select name[0];
foreach (var initial in initials)
{
Console.WriteLine(initial); // Output: A, B, C, D, E
}
এখানে Select
ব্যবহার করে প্রতিটি নামের প্রথম অক্ষর বের করা হয়েছে।
LINQ to Objects হল .NET Framework এর একটি শক্তিশালী টুল যা ইন-মেমোরি ডেটা সোর্স (যেমন List, Array, Dictionary) থেকে ডেটা কুয়েরি এবং ম্যানিপুলেশন করার জন্য ব্যবহৃত হয়। এটি ডেভেলপারদের SQL-এর মতো সিনট্যাক্স ব্যবহার করে কোড লেখার সুযোগ দেয়, তবে .NET ভাষার মধ্যে একীভূত থাকে। LINQ to Objects ব্যবহারের মাধ্যমে কোড দ্রুত এবং রিডেবল হয়, এবং ডেটা প্রসেসিং সহজ হয়।
LINQ to SQL হল LINQ (Language Integrated Query)-এর একটি প্রকার যা ডেটাবেসে কুয়েরি করার জন্য ব্যবহৃত হয়। এটি SQL Server ডেটাবেসের সাথে কাজ করতে সাহায্য করে এবং ডেটাবেসের টেবিলগুলোর উপর LINQ কুয়েরি লেখার সুবিধা প্রদান করে। LINQ to SQL ডেভেলপারদেরকে SQL কুয়েরি লিখে না গিয়ে .NET ভাষার মধ্যে ডেটাবেস অপারেশন পরিচালনা করার সুযোগ দেয়।
LINQ to SQL ব্যবহার করার মাধ্যমে আপনি Object-Relational Mapping (ORM) প্রক্রিয়ার সুবিধা পেতে পারেন, যেখানে ডেটাবেস টেবিলগুলো C# ক্লাস বা অবজেক্ট হিসেবে রূপান্তরিত হয়। এই পদ্ধতিতে, ডেভেলপারদেরকে SQL স্টেটমেন্টের পরিবর্তে সাধারণ .NET কোড ব্যবহার করে ডেটাবেসের সাথে যোগাযোগ করতে সহায়তা করা হয়।
LINQ to SQL ব্যবহার করতে হলে প্রথমে DataContext ক্লাসটি তৈরি করতে হবে, যা ডেটাবেসের সাথে যোগাযোগের জন্য ব্যবহৃত হবে। তারপর, ডেটাবেস টেবিলের প্রতিনিধিত্বকারী এনটিটি ক্লাস তৈরি করা হয়।
DataContext হল LINQ to SQL এর একটি মূল অংশ, যা ডেটাবেসের সাথে সংযোগ স্থাপন এবং ডেটাবেস অপারেশন পরিচালনা করতে ব্যবহৃত হয়।
উদাহরণ:
public class NorthwindDataContext : DataContext
{
public Table<Customer> Customers;
public Table<Order> Orders;
public NorthwindDataContext(string connectionString) : base(connectionString)
{
}
}
এখানে Table<T>
হল LINQ to SQL এর ক্লাস যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করে।
string connectionString = @"your_connection_string";
using (var context = new NorthwindDataContext(connectionString))
{
var query = from c in context.Customers
where c.City == "London"
select c;
foreach (var customer in query)
{
Console.WriteLine(customer.CustomerName);
}
}
এখানে Customers
টেবিলের City ফিল্ডের মান "London" যাদের তাদের নাম প্রিন্ট করা হয়েছে।
using (var context = new NorthwindDataContext(connectionString))
{
var newCustomer = new Customer
{
CustomerID = "NEWID123",
CompanyName = "New Customer Inc.",
City = "New York",
ContactName = "John Doe"
};
context.Customers.InsertOnSubmit(newCustomer);
context.SubmitChanges(); // পরিবর্তন ডেটাবেসে সেভ
}
এখানে একটি নতুন Customer অবজেক্ট তৈরি করা হয়েছে এবং তা Customers টেবিলের মধ্যে ইনসার্ট করা হয়েছে।
using (var context = new NorthwindDataContext(connectionString))
{
var customerToUpdate = (from c in context.Customers
where c.CustomerID == "NEWID123"
select c).FirstOrDefault();
if (customerToUpdate != null)
{
customerToUpdate.ContactName = "Jane Doe";
context.SubmitChanges(); // পরিবর্তন ডেটাবেসে সেভ
}
}
এখানে Customer টেবিল থেকে একটি রেকর্ড নির্বাচন করে তার ContactName ফিল্ড আপডেট করা হয়েছে।
using (var context = new NorthwindDataContext(connectionString))
{
var customerToDelete = (from c in context.Customers
where c.CustomerID == "NEWID123"
select c).FirstOrDefault();
if (customerToDelete != null)
{
context.Customers.DeleteOnSubmit(customerToDelete);
context.SubmitChanges(); // পরিবর্তন ডেটাবেসে সেভ
}
}
এখানে একটি Customer রেকর্ড ডিলিট করা হয়েছে।
LINQ to SQL একটি শক্তিশালী টুল যা ডেভেলপারদের SQL Server ডেটাবেসের সাথে সহজে যোগাযোগ করার সুযোগ দেয়। এটি Object-Relational Mapping (ORM) ব্যবহার করে ডেটাবেস টেবিলগুলিকে .NET অবজেক্ট হিসেবে রূপান্তরিত করে এবং INSERT, UPDATE, DELETE অপারেশনগুলো স্বয়ংক্রিয়ভাবে পরিচালনা করে। যদিও LINQ to SQL এর কিছু সীমাবদ্ধতা রয়েছে, এটি ছোট থেকে মাঝারি আকারের ডেটাবেস অ্যাপ্লিকেশনের জন্য খুবই উপকারী।
LINQ to XML হল LINQ (Language Integrated Query)-এর একটি প্রকার যা XML ডেটা কুয়েরি, ম্যানিপুলেশন এবং প্রসেসিং করার জন্য ব্যবহৃত হয়। এটি XML ডেটা থেকে কুয়েরি, ডেটা নির্বাচন, এবং পরিবর্তন করার জন্য LINQ এর সুবিধা সরবরাহ করে। LINQ to XML ব্যবহার করে ডেভেলপাররা XML ডকুমেন্টের মধ্যে সহজেই কুয়েরি চালাতে এবং XML ডকুমেন্টকে আরও কার্যকরভাবে ম্যানিপুলেট করতে পারেন।
LINQ to XML একটি শক্তিশালী টুল, কারণ এটি XML ডেটার সাথে সহজ এবং কার্যকর পদ্ধতিতে কাজ করার জন্য XDocument, XElement, এবং LINQ Query ব্যবহার করতে সহায়ক।
LINQ to XML ব্যবহার করার জন্য, প্রথমে XDocument বা XElement অবজেক্ট তৈরি করতে হয়, যার মাধ্যমে XML ডেটার সাথে কাজ করা যায়। এরপর, LINQ Query ব্যবহার করে XML ডেটা কুয়েরি করা হয় এবং XElement বা XDocument ব্যবহার করে ডেটা পরিবর্তন করা হয়।
XDocument xdoc = XDocument.Load("books.xml");
এখানে XDocument.Load
মেথড ব্যবহার করে একটি XML ডকুমেন্ট লোড করা হয়েছে, যেটি "books.xml" নামক ফাইল থেকে পড়া হয়েছে।
XDocument xdoc = XDocument.Load("books.xml");
var books = from b in xdoc.Descendants("book")
where (int)b.Element("price") > 20
select b;
foreach (var book in books)
{
Console.WriteLine(book.Element("title").Value);
}
এখানে Descendants("book")
ব্যবহার করে XML ডকুমেন্টের সব book
এলিমেন্টের উপর কুয়েরি করা হয়েছে এবং তাদের price এলিমেন্টের মান ২০ এর বেশি হলে, সেই বইগুলোর title প্রদর্শন করা হয়েছে।
XDocument xdoc = XDocument.Load("books.xml");
var titles = from b in xdoc.Descendants("book")
select b.Element("title").Value;
foreach (var title in titles)
{
Console.WriteLine(title); // Output: Book 1, Book 2, ...
}
এখানে XML থেকে book
এলিমেন্টের title মানগুলি নির্বাচন করা হয়েছে এবং তাদের প্রিন্ট করা হয়েছে।
XDocument xdoc = XDocument.Load("books.xml");
xdoc.Root.Add(new XElement("book",
new XElement("title", "New Book"),
new XElement("author", "John Doe"),
new XElement("price", 25)));
xdoc.Save("books.xml"); // নতুন বই ডকুমেন্টে যোগ করা হয়েছে
এখানে একটি নতুন book এলিমেন্ট XML ডকুমেন্টের শিকড়ে (root) যোগ করা হয়েছে।
XDocument xdoc = XDocument.Load("books.xml");
var book = xdoc.Descendants("book")
.Where(b => (string)b.Element("title") == "Old Book")
.FirstOrDefault();
if (book != null)
{
book.Element("title").Value = "Updated Book"; // title পরিবর্তন করা হয়েছে
xdoc.Save("books.xml"); // পরিবর্তন সংরক্ষণ করা হয়েছে
}
এখানে Old Book এর title পরিবর্তন করে Updated Book করা হয়েছে।
XDocument xdoc = XDocument.Load("books.xml");
var bookToRemove = xdoc.Descendants("book")
.Where(b => (string)b.Element("title") == "Book to Remove")
.FirstOrDefault();
if (bookToRemove != null)
{
bookToRemove.Remove(); // book মুছে ফেলা হয়েছে
xdoc.Save("books.xml"); // পরিবর্তন সংরক্ষণ করা হয়েছে
}
এখানে book
এর title অনুযায়ী একটি বই মুছে ফেলা হয়েছে।
LINQ to XML হল XML ডেটার সাথে কাজ করার জন্য একটি শক্তিশালী এবং কার্যকরী পদ্ধতি। এটি XML ডকুমেন্ট কুয়েরি, ডেটা নির্বাচন, ম্যানিপুলেশন, এবং আপডেট করার জন্য LINQ-এর সুবিধা প্রদান করে। LINQ to XML ডেভেলপারদের জন্য খুবই উপকারী, কারণ এটি XML ডেটার উপর কাজ করার সময় সহজ এবং পরিষ্কার কোড লেখার সুযোগ দেয়। তবে বড় XML ডেটা সেটের জন্য পারফরম্যান্সের কিছু সীমাবদ্ধতা থাকতে পারে।
LINQ to Entities হল LINQ এর একটি প্রকার যা Entity Framework (EF) এর সাথে ব্যবহৃত হয়। Entity Framework (EF) একটি Object-Relational Mapping (ORM) টুল যা .NET ডেভেলপারদেরকে ডেটাবেসে ডেটা কুয়েরি করার জন্য C# বা VB.NET কোড ব্যবহার করতে সাহায্য করে। LINQ to Entities এর মাধ্যমে ডেভেলপাররা ডেটাবেস টেবিলগুলিকে C# ক্লাস হিসেবে রূপান্তরিত করে এবং LINQ এর মাধ্যমে ডেটাবেস কুয়েরি করতে পারেন।
Entity Framework (EF) একটি পূর্ণাঙ্গ ORM টুল যা Code First, Database First, এবং Model First পদ্ধতির মাধ্যমে ডেটাবেসের সাথে কাজ করতে সহায়ক। LINQ to Entities Entity Framework ব্যবহার করে ডেটাবেস কুয়েরি করতে LINQ সিনট্যাক্স ব্যবহার করে এবং ডেটাবেস থেকে তথ্য রিট্রাইভ করতে সক্ষম।
LINQ to Entities ব্যবহার করার জন্য প্রথমে একটি DbContext ক্লাস তৈরি করতে হয়, যা ডেটাবেসের সাথে যোগাযোগের জন্য ব্যবহৃত হয়। পরে, Entity Framework এর মাধ্যমে ডেটাবেস টেবিলের DbSet ক্লাস তৈরি করতে হয়, যা টেবিলের প্রতিনিধিত্ব করে।
Entity Framework এর DbContext ক্লাস ডেটাবেসের সাথে যোগাযোগের জন্য ব্যবহৃত হয়, এবং DbSet ক্লাস ডেটাবেস টেবিলগুলির জন্য ব্যবহৃত হয়।
উদাহরণ:
public class MyDbContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
public DbSet<Order> Orders { get; set; }
public MyDbContext() : base("name=MyConnectionString")
{
}
}
এখানে Customer
এবং Order
ক্লাসগুলি ডেটাবেস টেবিলের প্রতিনিধিত্ব করে।
public class Customer
{
public int CustomerID { get; set; }
public string Name { get; set; }
public string City { get; set; }
}
public class Order
{
public int OrderID { get; set; }
public int CustomerID { get; set; }
public DateTime OrderDate { get; set; }
public virtual Customer Customer { get; set; }
}
এখানে Customer
এবং Order
ক্লাসগুলি ডেটাবেস টেবিলের রেকর্ডকে অবজেক্টে রূপান্তরিত করে।
using (var context = new MyDbContext())
{
var query = from c in context.Customers
where c.City == "New York"
select c;
foreach (var customer in query)
{
Console.WriteLine(customer.Name);
}
}
এখানে Customers
টেবিলের থেকে City "New York" যাদের তাদের নাম প্রিন্ট করা হয়েছে।
using (var context = new MyDbContext())
{
var newCustomer = new Customer
{
Name = "John Doe",
City = "Los Angeles"
};
context.Customers.Add(newCustomer);
context.SaveChanges(); // পরিবর্তন ডেটাবেসে সেভ
}
এখানে একটি নতুন Customer অবজেক্ট তৈরি করা হয়েছে এবং তা Customers টেবিলের মধ্যে ইনসার্ট করা হয়েছে।
using (var context = new MyDbContext())
{
var customerToUpdate = (from c in context.Customers
where c.CustomerID == 1
select c).FirstOrDefault();
if (customerToUpdate != null)
{
customerToUpdate.Name = "Jane Doe";
context.SaveChanges(); // পরিবর্তন ডেটাবেসে সেভ
}
}
এখানে Customer টেবিল থেকে একটি রেকর্ড নির্বাচন করা হয়েছে এবং তার Name ফিল্ড আপডেট করা হয়েছে।
using (var context = new MyDbContext())
{
var customerToDelete = (from c in context.Customers
where c.CustomerID == 1
select c).FirstOrDefault();
if (customerToDelete != null)
{
context.Customers.Remove(customerToDelete);
context.SaveChanges(); // পরিবর্তন ডেটাবেসে সেভ
}
}
এখানে একটি Customer রেকর্ড ডিলিট করা হয়েছে।
LINQ to Entities হল Entity Framework ব্যবহার করে ডেটাবেস কুয়েরি করার একটি শক্তিশালী পদ্ধতি। এটি ডেটাবেস টেবিলের জন্য C# ক্লাস বা অবজেক্ট তৈরি করে এবং LINQ সিনট্যাক্স ব্যবহার করে ডেটা কুয়েরি করার সুবিধা প্রদান করে। Entity Framework-এর Object-Relational Mapping (ORM), Deferred Execution, এবং Code First পদ্ধতির সুবিধাগুলি ডেভেলপারদের জন্য ডেটাবেস ম্যানিপুলেশন অনেক সহজ এবং রিডেবল করে তোলে। তবে, কিছু বিশেষ পরিস্থিতিতে কাস্টম SQL বা বড় ডেটাবেসে ব্যবহারের সময় কিছু সীমাবদ্ধতা থাকতে পারে।
LINQ to DataSet হল LINQ (Language Integrated Query)-এর একটি প্রকার যা ADO.NET DataSet এর সাথে কাজ করে। এটি ডেটাবেস থেকে ডেটা রিট্রাইভ করার পর DataSet বা DataTable এর মধ্যে থাকা ডেটার উপর LINQ কুয়েরি প্রয়োগ করতে ব্যবহৃত হয়। LINQ to DataSet ডেটাবেসের পরিবর্তে ইন-মেমোরি ডেটা সোর্সের উপর কুয়েরি চালানোর জন্য খুবই কার্যকরী।
ADO.NET DataSet একটি ইন-মেমোরি ডেটাবেস বা ডেটা স্টোরেজ হিসেবে কাজ করে, যা একাধিক DataTable ধারণ করে এবং আপনি LINQ এর মাধ্যমে এই DataTable এর মধ্যে কুয়েরি করতে পারেন।
LINQ to DataSet ব্যবহার করলে ডেভেলপাররা DataSet বা DataTable এর উপর SQL কুয়েরি লেখা ছাড়াই সহজভাবে ডেটা ম্যানিপুলেশন করতে পারে, কারণ LINQ কুয়েরি লেখার পদ্ধতি SQL এর মতো কিন্তু C# কোডের মধ্যে লেখা হয়।
LINQ to DataSet ব্যবহার করতে হলে প্রথমে DataSet বা DataTable তৈরি করতে হবে এবং তারপর LINQ কুয়েরি প্রয়োগ করতে হবে। নিচে একটি উদাহরণ দেখানো হল, যেখানে LINQ to DataSet ব্যবহার করে ডেটা কুয়েরি করা হয়েছে।
using System;
using System.Data;
using System.Linq;
class Program
{
static void Main()
{
// DataTable তৈরি
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("ProductName", typeof(string));
dt.Columns.Add("Category", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
// DataTable-এ ডেটা ইনসার্ট করা
dt.Rows.Add(1, "Product1", "Category1", 20.5);
dt.Rows.Add(2, "Product2", "Category1", 30.0);
dt.Rows.Add(3, "Product3", "Category2", 15.5);
dt.Rows.Add(4, "Product4", "Category2", 25.0);
// DataSet তৈরি এবং DataTable যোগ করা
DataSet ds = new DataSet();
ds.Tables.Add(dt);
// LINQ কুয়েরি দিয়ে Price 20 এর বেশি পণ্যের নাম বের করা
var expensiveProducts = from product in ds.Tables["Products"].AsEnumerable()
where product.Field<decimal>("Price") > 20
select product.Field<string>("ProductName");
// ফলাফল প্রিন্ট করা
foreach (var product in expensiveProducts)
{
Console.WriteLine(product); // Output: Product2, Product4
}
}
}
এখানে একটি DataTable তৈরি করা হয়েছে, যেখানে পণ্যের তথ্য আছে, এবং সেই DataTable এর উপর LINQ কুয়েরি প্রয়োগ করা হয়েছে যা পণ্যের মূল্য ২০ এর বেশি এমন পণ্যগুলোর নাম বের করবে।
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("ProductName", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
// DataTable-এ ডেটা ইনসার্ট করা
dt.Rows.Add(1, "Product1", 10.5);
dt.Rows.Add(2, "Product2", 20.5);
dt.Rows.Add(3, "Product3", 30.0);
dt.Rows.Add(4, "Product4", 25.0);
// LINQ কুয়েরি দিয়ে Price 20 এর কম পণ্য নির্বাচন করা
var cheapProducts = from p in dt.AsEnumerable()
where p.Field<decimal>("Price") < 20
select new
{
ProductName = p.Field<string>("ProductName"),
Price = p.Field<decimal>("Price")
};
foreach (var product in cheapProducts)
{
Console.WriteLine($"{product.ProductName}: {product.Price}");
}
// Output: Product1: 10.5
এখানে LINQ to DataSet ব্যবহার করে Price ২০ এর কম এমন পণ্যের নাম এবং মূল্য বের করা হয়েছে।
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("Category", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
dt.Rows.Add(1, "Category1", 20.5);
dt.Rows.Add(2, "Category1", 30.0);
dt.Rows.Add(3, "Category2", 15.5);
dt.Rows.Add(4, "Category2", 25.0);
// DataTable-এ গ্রুপিং করা
var categoryGroups = from p in dt.AsEnumerable()
group p by p.Field<string>("Category") into categoryGroup
select new
{
Category = categoryGroup.Key,
AveragePrice = categoryGroup.Average(p => p.Field<decimal>("Price"))
};
foreach (var category in categoryGroups)
{
Console.WriteLine($"{category.Category}: Average Price = {category.AveragePrice}");
}
// Output: Category1: Average Price = 25.25
// Output: Category2: Average Price = 20.25
এখানে LINQ to DataSet ব্যবহার করে Category অনুযায়ী পণ্যগুলোর গড় মূল্য বের করা হয়েছে।
LINQ to DataSet ডেভেলপারদের জন্য একটি শক্তিশালী টুল যা ADO.NET DataSet বা DataTable এর উপর LINQ কুয়েরি প্রয়োগ করতে সহায়ক। এটি ডেটা ফিল্টার, গ্রুপ, অর্ডার বা প্রক্ষেপণ করতে খুবই কার্যকরী, এবং Deferred Execution সুবিধা প্রদান করে। যদিও কিছু সীমাবদ্ধতা রয়েছে, তবে এটি ইন-মেমোরি ডেটা ম্যানিপুলেশন এবং ডেটাবেসের সাথে কাজ করার সময় একটি শক্তিশালী পদ্ধতি।
common.read_more